#ifndef VOTEWIDGET_H
#define VOTEWIDGET_H

/**
Nectarine Utility Project is a software interface for the web system 'demovibes'
Copyright (C) 2010  Alexandre LAURENT

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

website: http://code.google.com/p/nectarine-utility-project/
e-mail: lw.demoscene@gmail.com
**/

#include <QObject>
#include <QWidget>

#include <QList>

class QHBoxLayout;
class QPushButton;

class QSignalMapper;

class QMouseEvent;

class QEvent;


// Used to have a signal when the mouse is overing the stars
class MouseMotionNotifier : public QObject
{
    Q_OBJECT

signals:

    void mouseIsHovering(void);

protected:
    bool eventFilter(QObject* pObj, QEvent* pEvent);

public:
    MouseMotionNotifier(QObject* parent)
        :QObject(parent)
    {}
};

class VoteWidget : public QWidget
{
    Q_OBJECT

private:

    QHBoxLayout* pMainGrid;
    QList<MouseMotionNotifier*> listPMMN;
    QList<QPushButton*> listPStars;

    QSignalMapper* pSignalMapperClicks;
    QSignalMapper* pSignalMapperOvers;

    int actualVote;
    int actualOver;

    void setStarsIcon(void);

protected:

    void mouseMoveEvent(QMouseEvent* pME);

protected slots:

    void voteRequest(const int note);
    void hoverButton(const int note);

signals:

    void voteSignal(const int note);

public:
    explicit VoteWidget(QWidget *parent = 0);
    ~VoteWidget(void);

    void reset(void);

    void setActualVote(const int newVote);
};

#endif // VOTEWIDGET_H
